package main

import (
	"database/sql"
	"fmt"
	"log"
	"net/http"
)
import _ "github.com/go-sql-driver/mysql"
import "github.com/gin-gonic/gin"

// 定义一个全局对象 db
var db *sql.DB

func main() {

	//编写一个HelloWorld
	//1 创建一个路由
	engine := gin.Default()
	//2 绑定路由规则，执行的函数
	//gin.Context 相当于把Request 和Response 封装起来了
	engine.GET("/get", func(context *gin.Context) {
		//如果是200 就返回 hello World
		name, _ := context.GetQuery("name")
		age, _ := context.GetPostForm("age")

		context.String(http.StatusOK, age+" Hello World! "+name)
	})
	engine.POST("/post", func(context *gin.Context) {
		//如果是200 就返回 hello World
		name, _ := context.GetPostForm("name")
		age, _ := context.GetPostForm("age")

		context.String(http.StatusOK, age+" hello World! "+name)
	})
	engine.POST("/file", func(context *gin.Context) {
		//如果是200 就返回 hello World
		file, _ := context.FormFile("image_1")
		//打印文件名称
		log.Println(file.Filename)
		//上传文件并且保存在项目根路径 第一个是文件 第二个是 文件名称
		context.SaveUploadedFile(file, file.Filename)
		//打印信息
		context.String(http.StatusOK, "上传成功")
	})

	engine.POST("/json", func(context *gin.Context) {
		//var user1 User1
		var cards []Cards
		err := context.ShouldBind(&cards)
		if err != nil {
			context.JSON(http.StatusBadRequest, gin.H{"status": "304"})
			return
		}
		if cards != nil {
			//遍历数据
			for index, value := range cards {
				fmt.Printf("数组cards[%d] = %v \n", index, value)
			}

		}
		//打印信息
		context.String(http.StatusOK, "{\"code\":\"json参数成功\"}")
	})

	engine.POST("/jsonObj", func(context *gin.Context) {
		var user1 User1

		err := context.ShouldBind(&user1)
		if err != nil {
			context.JSON(http.StatusBadRequest, gin.H{"status": "304"})
			return
		}
		fmt.Println(user1.Id + " " + user1.Name)
		//遍历数据
		for index, value := range user1.Card {
			fmt.Printf("数组cards[%d] = %v \n", index, value)
		}

		//打印信息
		context.String(http.StatusOK, "{\"code\":\"json参数成功\"}")
	})
	//3 监听端口 默认是8081
	engine.Run("0.0.0.0:8001")

}

type User1 struct {
	Id   string  `json:"id"`
	Name string  `json:"name"`
	Card []Cards `json:"card"`
}

type Cards struct {
	Id   int    `json:"id"`
	High string `json:"high"`
	Wide string `json:"wide"`
}
